/**
  ******************************************************************************
  * @file    WF_ScanResult.c
  * @author  exatron
  * @version V1.0.0
  * @date    segunda, 22 de dezembro de 2014
  * @brief   Função que retorna uma lista com os SSIDs e tipos de segurança de
  * cada.
  ******************************************************************************
  * @attention
  *
  *
  ******************************************************************************
  */

/** @addtogroup WF
  * @{
  */

/* Includes ------------------------------------------------------------------*/
#include <common.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

/* External functions --------------------------------------------------------*/

/** @defgroup WF_Functions
  * @{
  */

/**
  * @brief  Função que retorna uma lista com os SSIDs e tipos de segurança de
  * cada.
  * @param  Nenhum
  * @retval Devolve pela serial as redes ou Result_t
  */
void WF_ScanResult(void)
{
	char line[255], old[255], new[255];
	int acabou = TRUE;
	int nbytes = 0;
	int nredes = 0;
	FILE *fp;
	FILE *fp_temp;

	bzero(line,sizeof(line));
	bzero(old,sizeof(old));
	bzero(new,sizeof(new));

	/* Arquivo scanresult */
	sprintf(new,"%s%s",PATH_TEMP,"scanresult");
	fp = fopen(new,"r");
	if(!fp)
	    return;

	fgets(line,sizeof(line),fp);
	aux_removec(line,'\n',sizeof(line));

	/* Se há redes para ler */
	if(aux_IsNumber(line) == TRUE)
	{
		nredes = atoi(line);

		/* Se há redes */
		if(nredes > 0)
		{
			aux_USART0_puts("%s=%d;%s%c","WF_SRT", Result_Ok, line, 0xFF);

			while(!feof(fp))
			{
				bzero(line, sizeof(line));

				/* Se chegou no limite do PIC */
				if(nbytes >= PIC_BUF_LEN)
				{
					/* Se ainda tem rede pra ler */
					if(nredes > 0)
					{
						/* Arquivo scanresult.temp */
						sprintf(old,"%s%s",PATH_TEMP,"scanresult.temp");
						fp_temp = fopen(old,"w");
						if(!fp_temp)
							return;

						/* Número de redes que ainda faltam */
						fprintf(fp_temp, "%d\n", nredes);

						/* Coloca no arquivo temporário as redes que faltam */
						while(!feof(fp))
						{
							bzero(line, sizeof(line));
							fgets(line,sizeof(line),fp);
							fputs(line, fp_temp);
						}

						acabou = FALSE;
						fclose(fp_temp);

						rename(old, new);
					}
				}
				/* Se ainda pode plotar na serial */
				else
				{
					fgets(line,sizeof(line),fp);
					aux_removec(line,'\n',sizeof(line));

					nbytes += (strlen(line)+1);
					nredes--;

					if(nredes == 0 || nbytes >= PIC_BUF_LEN)
						aux_USART0_puts("%s\r\n",line);
					else
						aux_USART0_puts("%s%c", line, 0xFF);
				}
			}
		}
		else
		{
			aux_USART0_puts("%s=%d;%s\r\n","WF_SRT", Result_Ok,line);
		}
	}
	else
	{
		aux_USART0_puts("%s=%d\r\n","WF_SRT", Result_Error);
	}

	fclose(fp);

	/* Se acabou limpa flags */
	if(acabou == TRUE)
	{
		aux_FileWrLine(PATH_TEMP, "scandone", aux_itoa(Result_Error), "Erro limpando scandone\r\n");
		aux_FileWrLine(PATH_TEMP, "scanresult", aux_itoa(Result_Error), "Erro limpando scanresult\r\n");
	}

	aux_SetBusy(FALSE);
}

/**
  * @}
  */

/**
  * @}
  */

